ZQuest Classic Coverage Report


Directory: src/
File: src/gui/builder.h
Date: 2025-01-10 07:34:20
Exec Total Coverage
Lines: 0 297 0.0%
Functions: 0 13261 0.0%
Branches: 0 5260 0.0%

Line Branch Exec Source
1 #ifndef ZC_GUI_BUILDER_HPP
2 #define ZC_GUI_BUILDER_HPP
3
4 #include "gui/use_size.h"
5 extern int32_t zq_screen_w, zq_screen_h;
6 #include "gui/button.h"
7 #include "gui/checkbox.h"
8 #include "gui/checkbox_qr.h"
9 #include "gui/colorsel.h"
10 #include "gui/common.h"
11 #include "gui/ditherprev.h"
12 #include "gui/drop_down_list.h"
13 #include "gui/frame.h"
14 #include "gui/grid.h"
15 #include "gui/key.h"
16 #include "gui/label.h"
17 #include "gui/qrpanel.h"
18 #include "gui/ddpanel.h"
19 #include "gui/radio.h"
20 #include "gui/radioset.h"
21 #include "gui/size.h"
22 #include "gui/slider.h"
23 #include "gui/switcher.h"
24 #include "gui/tabpanel.h"
25 #include "gui/tabref.h"
26 #include "gui/list.h"
27 #include "gui/scrolling_pane.h"
28 #include "gui/text_field.h"
29 #include "gui/window.h"
30 #include "gui/widget.h"
31
32 #ifdef IS_EDITOR
33 #include "zq/gui/seltile_swatch.h"
34 #include "zq/gui/selcombo_swatch.h"
35 #include "zq/gui/tileanim_frame.h"
36 #include "zq/gui/msgstr_preview.h"
37 #include "zq/gui/palette_frame.h"
38 #include "zq/gui/cornerselect.h"
39 #include "zq/gui/misc_cset_sel.h"
40 #include "zq/gui/misc_color_sel.h"
41 #include "zq/gui/misc_color_row.h"
42 #include "zq/gui/dmap_minimap.h"
43 #include "zq/gui/dmap_mapgrid.h"
44 #include "zq/gui/engraving.h"
45 #endif
46
47 #include <initializer_list>
48 #include <memory>
49 #include <string>
50 #include <string_view>
51
52 // These have to be included in order after the ones above.
53 #include "gui/macros.h"
54 #include "gui/props.h"
55
56 /*
57 * A brief explanation of how this works:
58 *
59 * Each property name is a global variable of a unique type. That type has
60 * an inner class template instantiated by its operator=. For instance,
61 * the property checked is an instance of checkedProp, and checked=true
62 * returns an instance of checkedProp::Value<bool>.
63 *
64 * The builder classes have a generic applyProp function that rejects any
65 * argument as invalid. ZCGUI_ACCEPT_PROP adds a specialization for that
66 * property that calls the corresponding function on the widget. Similarly,
67 * the builders have an addChildren function that rejects all children.
68 * ZCGUI_ACCEPT_ONE_CHILD and ZCGUI_ACCEPT_MULTIPLE_CHILDREN add overloads
69 * that call the appropriate functions.
70 *
71 * A builder function calls the corresponding makeX function and creates
72 * a builder class, then passes everything to the applyArgs functions.
73 * If the first argument is a property, it calls the builder's applyProp
74 * function and calls applyArgs with the remaining arguments. If it's a widget
75 * pointer, it passes all the remaining arguments to addChildren.
76 */
77
78 namespace GUI::Internal
79 {
80
81 struct DummyType {};
82 static constexpr DummyType dummy={};
83
84 // Regular widgets
85
86 inline std::shared_ptr<Button> makeButton()
87 {
88 return std::make_shared<Button>();
89 }
90
91 inline std::shared_ptr<Checkbox> makeCheckbox()
92 {
93 return std::make_shared<Checkbox>();
94 }
95
96 inline std::shared_ptr<QRCheckbox> makeQRCheckbox()
97 {
98 return std::make_shared<QRCheckbox>();
99 }
100
101 inline std::shared_ptr<DropDownList> makeDropDownList()
102 {
103 return std::make_shared<DropDownList>();
104 }
105
106 inline std::shared_ptr<Label> makeLabel()
107 {
108 return std::make_shared<Label>();
109 }
110
111 inline std::shared_ptr<List> makeList()
112 {
113 return std::make_shared<List>();
114 }
115
116 inline std::shared_ptr<TextField> makeTextField()
117 {
118 return std::make_shared<TextField>();
119 }
120
121 inline std::shared_ptr<ColorSel> makeColorSel()
122 {
123 return std::make_shared<ColorSel>();
124 }
125
126 inline std::shared_ptr<Slider> makeSlider()
127 {
128 return std::make_shared<Slider>();
129 }
130
131 inline std::shared_ptr<DitherPreview> makeDitherPreview()
132 {
133 return std::make_shared<DitherPreview>();
134 }
135
136 // Containers
137
138 inline std::shared_ptr<Frame> makeFrame()
139 {
140 return std::make_shared<Frame>();
141 }
142
143 // This is counterintuitive: Multiple rows=rows, one row=columns.
144 inline std::shared_ptr<Grid> makeColumn()
145 {
146 return Grid::rows(1);
147 }
148
149 inline std::shared_ptr<Grid> makeColumns(size_t size)
150 {
151 return Grid::columns(size);
152 }
153
154 inline std::shared_ptr<Grid> makeRow()
155 {
156 return Grid::columns(1);
157 }
158
159 inline std::shared_ptr<Grid> makeRows(size_t size)
160 {
161 return Grid::rows(size);
162 }
163
164 inline std::shared_ptr<Grid> makeRowsColumns(size_t size, size_t size2)
165 {
166 return Grid::rows_columns(size, size2);
167 }
168
169 inline std::shared_ptr<Grid> makeColumnsRows(size_t size, size_t size2)
170 {
171 return Grid::columns_rows(size, size2);
172 }
173
174 inline std::shared_ptr<ScrollingPane> makeScrollingPane()
175 {
176 return std::make_shared<ScrollingPane>();
177 }
178
179 inline std::shared_ptr<Switcher> makeSwitcher()
180 {
181 return std::make_shared<Switcher>();
182 }
183
184 inline std::shared_ptr<Menu> makeMenu()
185 {
186 return std::make_shared<Menu>();
187 }
188
189 inline std::shared_ptr<TabPanel> makeTabPanel()
190 {
191 return std::make_shared<TabPanel>();
192 }
193
194 inline std::shared_ptr<QRPanel> makeQRPanel()
195 {
196 return std::make_shared<QRPanel>();
197 }
198
199 inline std::shared_ptr<DDPanel> makeDDPanel()
200 {
201 return std::make_shared<DDPanel>();
202 }
203
204 inline std::shared_ptr<TabRef> makeTabRef()
205 {
206 return std::make_shared<TabRef>();
207 }
208
209 inline std::shared_ptr<Radio> makeRadio()
210 {
211 return std::make_shared<Radio>();
212 }
213
214 inline std::shared_ptr<RadioSet> makeRadioSet()
215 {
216 return std::make_shared<RadioSet>();
217 }
218
219 inline std::shared_ptr<DummyWidget> makeDummyWidget()
220 {
221 return std::make_shared<DummyWidget>();
222 }
223
224 #ifdef IS_EDITOR
225 inline std::shared_ptr<SelTileSwatch> makeSelTileSwatch()
226 {
227 return std::make_shared<SelTileSwatch>();
228 }
229
230 inline std::shared_ptr<SelComboSwatch> makeSelComboSwatch()
231 {
232 return std::make_shared<SelComboSwatch>();
233 }
234
235 inline std::shared_ptr<CornerSwatch> makeCornerSwatch()
236 {
237 return std::make_shared<CornerSwatch>();
238 }
239
240 inline std::shared_ptr<TileFrame> makeTileFrame()
241 {
242 return std::make_shared<TileFrame>();
243 }
244
245 inline std::shared_ptr<PaletteFrame> makePaletteFrame()
246 {
247 return std::make_shared<PaletteFrame>();
248 }
249
250 inline std::shared_ptr<MsgPreview> makeMsgPreview()
251 {
252 return std::make_shared<MsgPreview>();
253 }
254
255 inline std::shared_ptr<MiscCSetSel> makeMiscCSetSel()
256 {
257 return std::make_shared<MiscCSetSel>();
258 }
259
260 inline std::shared_ptr<MiscColorSel> makeMiscColorSel()
261 {
262 return std::make_shared<MiscColorSel>();
263 }
264
265 inline std::shared_ptr<MiscColorRow> makeMiscColorRow()
266 {
267 return std::make_shared<MiscColorRow>();
268 }
269
270 inline std::shared_ptr<DMapMinimap> makeDMapMinimap()
271 {
272 return std::make_shared<DMapMinimap>();
273 }
274
275 inline std::shared_ptr<DMapMapGrid> makeDMapMapGrid()
276 {
277 return std::make_shared<DMapMapGrid>();
278 }
279
280 inline std::shared_ptr<Engraving> makeEngraving()
281 {
282 return std::make_shared<Engraving>();
283 }
284 #endif
285
286 // Top-level widgets
287
288 inline std::shared_ptr<Window> makeWindow()
289 {
290 return std::make_shared<Window>();
291 }
292
293 } // namespace GUI::Internal
294
295 namespace GUI::Builder
296 {
297
298 ZCGUI_BUILDER_START(Button)
299 ZCGUI_ACCEPT_PROP(onClick, onClick, Dialog::message)
300 ZCGUI_ACCEPT_PROP(text, setText, std::string)
301 ZCGUI_ACCEPT_PROP(onPressFunc, setOnPress, std::function<void()>)
302 ZCGUI_ACCEPT_PROP(type, setType, Button::type)
303 ZCGUI_ACCEPT_PROP(kb_ptr, setBoundKB, int*)
304 ZCGUI_ACCEPT_PROP(hotkey_ptr, setBoundHotkey, Hotkey*)
305 ZCGUI_ACCEPT_PROP(hotkey_indx, setHotkeyIndx, size_t)
306 ZCGUI_ACCEPT_PROP(icon, setIcon, int)
307
308 ZCGUI_SUGGEST_PROP(title, text)
309 ZCGUI_SUGGEST_PROP(onEnter, onClick)
310 ZCGUI_BUILDER_END()
311 ZCGUI_BUILDER_FUNCTION(Button, Button, makeButton)
312
313
314 ZCGUI_BUILDER_START(Checkbox)
315 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
316 ZCGUI_ACCEPT_PROP(text, setText, std::string)
317 ZCGUI_ACCEPT_PROP(boxPlacement, setBoxPlacement, Checkbox::boxPlacement)
318 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
319 ZCGUI_ACCEPT_PROP(onToggleFunc, setOnToggleFunc, std::function<void(bool)>)
320
321 ZCGUI_SUGGEST_PROP(title, text)
322 ZCGUI_BUILDER_END()
323 ZCGUI_BUILDER_FUNCTION(Checkbox, Checkbox, makeCheckbox)
324
325 ZCGUI_BUILDER_START(Radio)
326 ZCGUI_ACCEPT_PROP(checked, setChecked, bool)
327 ZCGUI_ACCEPT_PROP(text, setText, std::string)
328 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
329 ZCGUI_ACCEPT_PROP(indx, setIndex, size_t)
330 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
331
332 ZCGUI_SUGGEST_PROP(title, text)
333 ZCGUI_BUILDER_END()
334 ZCGUI_BUILDER_FUNCTION(Radio, Radio, makeRadio)
335
336
337 ZCGUI_BUILDER_START(RadioSet)
338 ZCGUI_ACCEPT_PROP(checked, setChecked, int32_t)
339 ZCGUI_ACCEPT_PROP(set, setProcSet, int32_t)
340 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
341
342 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
343 ZCGUI_BUILDER_END()
344 ZCGUI_BUILDER_FUNCTION(RadioSet, RadioSet, makeRadioSet)
345
346
347 ZCGUI_BUILDER_START(DropDownList)
348 ZCGUI_ACCEPT_PROP(data, setListData, const ::GUI::ListData&)
349 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
350 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
351 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
352
353 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
354 ZCGUI_BUILDER_END()
355 ZCGUI_BUILDER_FUNCTION(DropDownList, DropDownList, makeDropDownList)
356
357
358 ZCGUI_BUILDER_START(Frame)
359 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
360 ZCGUI_ACCEPT_PROP(info, setInfo, std::string)
361 ZCGUI_ACCEPT_PROP(style, setStyle, GUI::Frame::style)
362 ZCGUI_ACCEPT_PROP(onInfo, onInfo, Dialog::message)
363 ZCGUI_ACCEPT_ONE_CHILD(setContent)
364
365 ZCGUI_SUGGEST_PROP(text, title)
366 ZCGUI_BUILDER_END()
367 ZCGUI_BUILDER_FUNCTION(Frame, Frame, makeFrame)
368
369
370 ZCGUI_BUILDER_START(Label)
371 ZCGUI_ACCEPT_PROP(text, setText, std::string)
372 ZCGUI_ACCEPT_PROP(maxLines, setMaxLines, std::size_t)
373 ZCGUI_ACCEPT_PROP(textAlign, setAlign, int32_t)
374 ZCGUI_ACCEPT_PROP(noHLine, setNoHLine, bool)
375
376 ZCGUI_SUGGEST_PROP(title, text)
377 ZCGUI_BUILDER_END()
378 ZCGUI_BUILDER_FUNCTION(Label, Label, makeLabel)
379
380
381 ZCGUI_BUILDER_START(List)
382 ZCGUI_ACCEPT_PROP(data, setListData, GUI::ListData)
383 ZCGUI_ACCEPT_PROP(selectedValue, setSelectedValue, int32_t)
384 ZCGUI_ACCEPT_PROP(selectedIndex, setSelectedIndex, int32_t)
385 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
386 ZCGUI_ACCEPT_PROP(onRClick, onRClick, Dialog::message)
387 ZCGUI_ACCEPT_PROP(onDClick, onDClick, Dialog::message)
388 ZCGUI_ACCEPT_PROP(onRClickFunc, setOnRClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
389 ZCGUI_ACCEPT_PROP(onDClickFunc, setOnDClickFunc, std::function<void(int32_t,int32_t,int32_t)>)
390 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
391 ZCGUI_ACCEPT_PROP(isABC, setIsABC, bool)
392
393 ZCGUI_SUGGEST_PROP(onClick, onSelectionChanged)
394 ZCGUI_BUILDER_END()
395 ZCGUI_BUILDER_FUNCTION(List, List, makeList)
396
397
398 ZCGUI_BUILDER_START(Grid)
399 ZCGUI_ACCEPT_PROP(columnSpacing, setColumnSpacing, ::GUI::Size)
400 ZCGUI_ACCEPT_PROP(rowSpacing, setRowSpacing, ::GUI::Size)
401 ZCGUI_ACCEPT_PROP(spacing, setSpacing, ::GUI::Size)
402
403 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
404 ZCGUI_BUILDER_END()
405 ZCGUI_BUILDER_FUNCTION(Grid, Row, makeRow)
406 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Rows, makeRows, std::size_t)
407 ZCGUI_BUILDER_FUNCTION(Grid, Column, makeColumn)
408 ZCGUI_BUILDER_FUNCTION_TEMPLATE(Grid, Columns, makeColumns, std::size_t)
409 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Rows_Columns, makeRowsColumns, std::size_t, std::size_t)
410 ZCGUI_BUILDER_FUNCTION_TEMPLATE2(Grid, Columns_Rows, makeColumnsRows, std::size_t, std::size_t)
411
412
413 ZCGUI_BUILDER_START(ScrollingPane)
414 ZCGUI_ACCEPT_PROP(ptr, setPtr, int32_t*)
415 ZCGUI_ACCEPT_PROP(targHeight, setTargHeight, ::GUI::Size)
416 ZCGUI_ACCEPT_ONE_CHILD(setContent)
417 ZCGUI_BUILDER_END()
418 ZCGUI_BUILDER_FUNCTION(ScrollingPane, ScrollingPane, makeScrollingPane)
419
420
421 ZCGUI_BUILDER_START(Switcher)
422 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
423 ZCGUI_BUILDER_END()
424 ZCGUI_BUILDER_FUNCTION(Switcher, Switcher, makeSwitcher)
425
426 ZCGUI_BUILDER_START(Menu)
427 ZCGUI_ACCEPT_PROP(menu, setMenu, GuiMenu*)
428 ZCGUI_BUILDER_END()
429 ZCGUI_BUILDER_FUNCTION(Menu, Menu, makeMenu)
430
431 ZCGUI_BUILDER_START(TabPanel)
432 ZCGUI_ACCEPT_PROP(indx, switchTo, size_t)
433 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
434 ZCGUI_ACCEPT_PROP(onSwitch, setOnSwitch, std::function<void(size_t,size_t)>)
435 ZCGUI_ACCEPT_MULTIPLE_CHILDREN(add)
436 ZCGUI_BUILDER_END()
437 ZCGUI_BUILDER_FUNCTION(TabPanel, TabPanel, makeTabPanel)
438
439 ZCGUI_BUILDER_START(QRPanel)
440 ZCGUI_ACCEPT_PROP(onToggle, onToggle, Dialog::message)
441 ZCGUI_ACCEPT_PROP(onCloseInfo, onCloseInfo, Dialog::message)
442 ZCGUI_ACCEPT_PROP(initializer, loadQRs, byte const*)
443 ZCGUI_ACCEPT_PROP(ptr, setPtr, size_t*)
444 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
445 ZCGUI_ACCEPT_PROP(showtags, setShowTags, bool)
446 ZCGUI_ACCEPT_PROP(indexed, setIndexed, bool)
447 ZCGUI_ACCEPT_PROP(scrollWidth, setScrollWidth, ::GUI::Size)
448 ZCGUI_ACCEPT_PROP(scrollHeight, setScrollHeight, ::GUI::Size)
449 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
450 ZCGUI_BUILDER_END()
451 ZCGUI_BUILDER_FUNCTION(QRPanel, QRPanel, makeQRPanel)
452
453 ZCGUI_BUILDER_START(DDPanel)
454 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
455 ZCGUI_ACCEPT_PROP(values, linkVals, int32_t*)
456 ZCGUI_ACCEPT_PROP(count, setCount, size_t)
457 ZCGUI_ACCEPT_PROP(ddlist, loadDDList, const ::GUI::ListData&)
458 ZCGUI_ACCEPT_PROP(data, loadList, const ::GUI::ListData&)
459 ZCGUI_BUILDER_END()
460 ZCGUI_BUILDER_FUNCTION(DDPanel, DDPanel, makeDDPanel)
461
462 ZCGUI_BUILDER_START(TabRef)
463 ZCGUI_ACCEPT_PROP(name, setName, std::string)
464 ZCGUI_ACCEPT_ONE_CHILD(setContent)
465 ZCGUI_BUILDER_END()
466 ZCGUI_BUILDER_FUNCTION(TabRef, TabRef, makeTabRef)
467
468 ZCGUI_BUILDER_START(TextField)
469 ZCGUI_ACCEPT_PROP(maxLength, setMaxLength, std::size_t);
470 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
471 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
472 ZCGUI_ACCEPT_PROP(text, setText, std::string_view)
473 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
474 ZCGUI_ACCEPT_PROP(type, setType, TextField::type)
475 ZCGUI_ACCEPT_PROP(low, setLowBound, int32_t)
476 ZCGUI_ACCEPT_PROP(high, setHighBound, int32_t)
477 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(TextField::type,std::string_view,int32_t)>)
478 ZCGUI_ACCEPT_PROP(places, setFixedPlaces, size_t)
479 ZCGUI_ACCEPT_PROP(swap_type, setSwapType, int32_t)
480 ZCGUI_BUILDER_END()
481 ZCGUI_BUILDER_FUNCTION(TextField, TextField, makeTextField)
482
483 ZCGUI_BUILDER_START(ColorSel)
484 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
485 ZCGUI_ACCEPT_PROP(val, setVal, byte)
486 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(byte)>)
487 ZCGUI_BUILDER_END()
488 ZCGUI_BUILDER_FUNCTION(ColorSel, ColorSel, makeColorSel)
489
490 ZCGUI_BUILDER_START(Slider)
491 ZCGUI_ACCEPT_PROP(onValueChanged, onValueChanged, Dialog::message)
492 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
493 ZCGUI_ACCEPT_PROP(minOffset, setMinOffset, int32_t)
494 ZCGUI_ACCEPT_PROP(maxOffset, setMaxOffset, int32_t)
495 ZCGUI_ACCEPT_PROP(onValChangedFunc, setOnValChanged, std::function<void(int32_t)>)
496 ZCGUI_BUILDER_END()
497 ZCGUI_BUILDER_FUNCTION(Slider, Slider, makeSlider)
498
499 ZCGUI_BUILDER_START(DitherPreview)
500 ZCGUI_ACCEPT_PROP(dither_type, setDitherType, byte)
501 ZCGUI_ACCEPT_PROP(dither_arg, setDitherArg, byte)
502 ZCGUI_ACCEPT_PROP(dither_color, setDitherColor, byte)
503 ZCGUI_ACCEPT_PROP(preview_scale, setPreviewScale, byte)
504 ZCGUI_BUILDER_END()
505 ZCGUI_BUILDER_FUNCTION(DitherPreview, DitherPreview, makeDitherPreview)
506
507 ZCGUI_BUILDER_START(Window)
508 ZCGUI_ACCEPT_PROP(title, setTitle, std::string)
509 ZCGUI_ACCEPT_PROP(info, setHelp, std::string)
510 ZCGUI_ACCEPT_PROP(menu, setMenu, std::shared_ptr<Menu>)
511 ZCGUI_ACCEPT_PROP(onClose, onClose, Dialog::message)
512 ZCGUI_ACCEPT_PROP(onEnter, onEnter, Dialog::message)
513 ZCGUI_ACCEPT_PROP(use_vsync, setVSync, bool)
514 ZCGUI_ACCEPT_PROP(shortcuts, addShortcuts,
515 std::initializer_list<KeyboardShortcut>)
516 ZCGUI_ACCEPT_PROP(onTick, setOnTick, std::function<int32_t()>)
517 ZCGUI_ACCEPT_PROP(onLoad, setOnLoad, std::function<void()>)
518 ZCGUI_ACCEPT_ONE_CHILD(setContent)
519
520 ZCGUI_SUGGEST_PROP(text, title)
521 ZCGUI_BUILDER_END()
522 ZCGUI_BUILDER_FUNCTION(Window, Window, makeWindow)
523
524 ZCGUI_BUILDER_START(DummyWidget)
525 ZCGUI_BUILDER_END()
526 ZCGUI_BUILDER_FUNCTION(DummyWidget, DummyWidget, makeDummyWidget)
527
528 #ifdef IS_EDITOR
529 ZCGUI_BUILDER_START(SelTileSwatch)
530 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
531 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
532 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
533 ZCGUI_ACCEPT_PROP(showFlip, setShowFlip, bool)
534 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
535 ZCGUI_ACCEPT_PROP(mini, setIsMini, bool)
536 ZCGUI_ACCEPT_PROP(showT0, setShowT0, bool)
537 ZCGUI_ACCEPT_PROP(minicorner, setMiniCrn, int32_t)
538 ZCGUI_ACCEPT_PROP(tilewid, setTileWid, int32_t)
539 ZCGUI_ACCEPT_PROP(tilehei, setTileHei, int32_t)
540 ZCGUI_ACCEPT_PROP(deftile, setDefTile, int32_t)
541 ZCGUI_ACCEPT_PROP(defcs, setDefCS, int32_t)
542 ZCGUI_ACCEPT_PROP(minionly, setMiniOnly, bool)
543 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
544 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t,int32_t)>)
545 ZCGUI_BUILDER_END()
546 ZCGUI_BUILDER_FUNCTION(SelTileSwatch, SelTileSwatch, makeSelTileSwatch)
547
548 ZCGUI_BUILDER_START(SelComboSwatch)
549 ZCGUI_ACCEPT_PROP(combo, setCombo, int32_t)
550 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
551 ZCGUI_ACCEPT_PROP(showvals, setShowVals, bool)
552 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
553 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t,int32_t)>)
554 ZCGUI_BUILDER_END()
555 ZCGUI_BUILDER_FUNCTION(SelComboSwatch, SelComboSwatch, makeSelComboSwatch)
556
557 ZCGUI_BUILDER_START(CornerSwatch)
558 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
559 ZCGUI_ACCEPT_PROP(color, setColor, int32_t)
560 ZCGUI_ACCEPT_PROP(onSelectionChanged, onSelectionChanged, Dialog::message)
561 ZCGUI_ACCEPT_PROP(onSelectFunc, setOnSelectFunc, std::function<void(int32_t)>)
562 ZCGUI_BUILDER_END()
563 ZCGUI_BUILDER_FUNCTION(CornerSwatch, CornerSwatch, makeCornerSwatch)
564
565 ZCGUI_BUILDER_START(TileFrame)
566 ZCGUI_ACCEPT_PROP(tile, setTile, int32_t)
567 ZCGUI_ACCEPT_PROP(cset, setCSet, int32_t)
568 ZCGUI_ACCEPT_PROP(cset2, setCSet2, int32_t)
569 ZCGUI_ACCEPT_PROP(speed, setSpeed, int32_t)
570 ZCGUI_ACCEPT_PROP(frames, setFrames, int32_t)
571 ZCGUI_ACCEPT_PROP(delay, setDelay, int32_t)
572 ZCGUI_ACCEPT_PROP(skipx, setSkipX, int32_t)
573 ZCGUI_ACCEPT_PROP(skipy, setSkipY, int32_t)
574 ZCGUI_ACCEPT_PROP(do_sized, setDoSized, bool)
575 ZCGUI_ACCEPT_PROP(flip, setFlip, int32_t)
576 ZCGUI_ACCEPT_PROP(flashcs, setFlashCS, int32_t)
577 ZCGUI_BUILDER_END()
578 ZCGUI_BUILDER_FUNCTION(TileFrame, TileFrame, makeTileFrame)
579
580 ZCGUI_BUILDER_START(PaletteFrame)
581 ZCGUI_ACCEPT_PROP(bitmap, setBitmap, BITMAP*)
582 ZCGUI_ACCEPT_PROP(cdata, setColorData, byte*)
583 ZCGUI_ACCEPT_PROP(palette, setPal, PALETTE*)
584 ZCGUI_ACCEPT_PROP(count, setCount, uint8_t)
585 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void()>)
586 ZCGUI_BUILDER_END()
587 ZCGUI_BUILDER_FUNCTION(PaletteFrame, PaletteFrame, makePaletteFrame)
588
589 ZCGUI_BUILDER_START(MsgPreview)
590 ZCGUI_ACCEPT_PROP(data, setData, MsgStr const*)
591 ZCGUI_ACCEPT_PROP(indx, setIndex, int32_t)
592 ZCGUI_ACCEPT_PROP(text, setText, std::string)
593 ZCGUI_BUILDER_END()
594 ZCGUI_BUILDER_FUNCTION(MsgPreview, MsgPreview, makeMsgPreview)
595
596 ZCGUI_BUILDER_START(MiscCSetSel)
597 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
598 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
599 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
600 ZCGUI_BUILDER_END()
601 ZCGUI_BUILDER_FUNCTION(MiscCSetSel, MiscCSetSel, makeMiscCSetSel)
602
603 ZCGUI_BUILDER_START(MiscColorSel)
604 ZCGUI_ACCEPT_PROP(c1, setC1, int32_t)
605 ZCGUI_ACCEPT_PROP(c2, setC2, int32_t)
606 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t,int32_t)>)
607 ZCGUI_BUILDER_END()
608 ZCGUI_BUILDER_FUNCTION(MiscColorSel, MiscColorSel, makeMiscColorSel)
609
610 ZCGUI_BUILDER_START(MiscColorRow)
611 ZCGUI_ACCEPT_PROP(system, setSys, bool)
612 ZCGUI_ACCEPT_PROP(val, setVal, int32_t)
613 ZCGUI_ACCEPT_PROP(cset, setCS, int32_t)
614 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(int32_t)>)
615 ZCGUI_BUILDER_END()
616 ZCGUI_BUILDER_FUNCTION(MiscColorRow, MiscColorRow, makeMiscColorRow)
617
618 ZCGUI_BUILDER_START(DMapMinimap)
619 ZCGUI_ACCEPT_PROP(curMap, setCurMap, int32_t)
620 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
621 ZCGUI_ACCEPT_PROP(offset, setOffset, int32_t)
622 ZCGUI_BUILDER_END()
623 ZCGUI_BUILDER_FUNCTION(DMapMinimap, DMapMinimap, makeDMapMinimap)
624
625 ZCGUI_BUILDER_START(DMapMapGrid)
626 ZCGUI_ACCEPT_PROP(mapGridPtr, setMapGridPtr, byte*)
627 ZCGUI_ACCEPT_PROP(continueScreen, setContinueScreen, int32_t)
628 ZCGUI_ACCEPT_PROP(compassScreen, setCompassScreen, bool)
629 ZCGUI_ACCEPT_PROP(smallDMap, setSmallDMap, bool)
630 ZCGUI_ACCEPT_PROP(onUpdate, setOnUpdate, std::function<void(byte*, byte, byte)>)
631 ZCGUI_BUILDER_END()
632 ZCGUI_BUILDER_FUNCTION(DMapMapGrid, DMapMapGrid, makeDMapMapGrid)
633
634 ZCGUI_BUILDER_START(Engraving)
635 ZCGUI_ACCEPT_PROP(data, setSlot, int32_t)
636 ZCGUI_BUILDER_END()
637 ZCGUI_BUILDER_FUNCTION(Engraving, Engraving, makeEngraving)
638
639 #endif
640
641 } // namespace GUI::builder
642
643 namespace GUI::Props
644 {
645
646 // We want these in scope for setting sizes.
647 using ::GUI::operator ""_em;
648 using ::GUI::operator ""_px;
649
650 } // namespace GUI::Props
651
652 //{ Builder Shortcuts
653 #define _d DummyWidget()
654
655 //
656
657 #define INITD_ROW(ind, d_mem, lab_mem) \
658 Row(vPadding = 0_px, \
659 TextField(maxLength = 64, \
660 text = std::string(lab_mem[ind]), \
661 type = GUI::TextField::type::TEXT, \
662 width = 8_em, \
663 rightPadding = 0_px, \
664 onValChangedFunc = [&](GUI::TextField::type,std::string_view str,int32_t) \
665 { \
666 for(size_t q = 0; q < 65; ++q) \
667 { \
668 if(q < str.size()) \
669 lab_mem[ind][q] = str.at(q); \
670 else \
671 lab_mem[ind][q] = 0; \
672 } \
673 } \
674 ), \
675 TextField( \
676 type = GUI::TextField::type::SWAP_ZSINT, \
677 val = d_mem[ind], \
678 width = 6.5_em+16_px, \
679 leftPadding = 0_px, \
680 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
681 { \
682 d_mem[ind] = val; \
683 } \
684 ) \
685 )
686
687 #define INITD_ROW2(ind, d_mem) \
688 Row(vPadding = 0_px, \
689 Label( text = "InitD["+std::to_string(ind)+"]:", \
690 textAlign = 2, \
691 rightPadding = 0_px \
692 ), \
693 TextField( \
694 type = GUI::TextField::type::SWAP_ZSINT, \
695 val = d_mem[ind], \
696 width = 6.5_em+16_px, \
697 leftPadding = 0_px, \
698 onValChangedFunc = [&](GUI::TextField::type,std::string_view,int32_t val) \
699 { \
700 d_mem[ind] = val; \
701 } \
702 ) \
703 )
704
705 #define SCRIPT_LIST(name, list, mem) \
706 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
707 DropDownList( \
708 fitParent = true, \
709 data = list, \
710 selectedValue = mem, \
711 onSelectFunc = [&](int32_t val) \
712 { \
713 mem = val; \
714 } \
715 )
716
717 #define SCRIPT_LIST_PROC(name, list, mem, proc) \
718 Label(minwidth = 6.5_em, text = name, textAlign = 2), \
719 DropDownList( \
720 fitParent = true, \
721 data = list, \
722 selectedValue = mem, \
723 onSelectFunc = [&](int32_t val) \
724 { \
725 mem = val; \
726 proc(); \
727 } \
728 )
729
730 //
731
732 #define DINFOBTN() \
733 Button(forceFitH = true, text = "?", \
734 disabled = true)
735 #define INFOBTN(inf) \
736 Button(forceFitH = true, text = "?", \
737 onClick = message::REFR_INFO, \
738 onPressFunc = [=]() \
739 { \
740 displayinfo("Info",inf); \
741 })
742 #define INFOBTN_F(inf,...) \
743 Button(forceFitH = true, text = "?", \
744 onClick = message::REFR_INFO, \
745 onPressFunc = [=]() \
746 { \
747 displayinfo("Info",fmt::format(inf,__VA_ARGS__)); \
748 })
749 #define INFOBTN_EX(inf, ...) \
750 Button(text = "?", \
751 onClick = message::REFR_INFO, \
752 __VA_ARGS__, \
753 onPressFunc = [=]() \
754 { \
755 displayinfo("Info",inf); \
756 })
757 #define INFOBTN_REF(getter) \
758 Button(forceFitH = true, text = "?", \
759 onClick = message::REFR_INFO, \
760 onPressFunc = [&]() \
761 { \
762 displayinfo("Info",getter); \
763 })
764
765 //
766
767 #define _INTBTN_PANEL_HELPER(var) \
768 Columns<4>( \
769 Checkbox( \
770 text = "A", hAlign = 0.0, \
771 checked = var&0x1, \
772 onToggleFunc = [&](bool state) \
773 { \
774 SETFLAG(var,0x1,state); \
775 }), \
776 Checkbox( \
777 text = "B", hAlign = 0.0, \
778 checked = var&0x2, \
779 onToggleFunc = [&](bool state) \
780 { \
781 SETFLAG(var,0x2,state); \
782 }), \
783 Checkbox( \
784 text = "L", hAlign = 0.0, \
785 checked = var&0x4, \
786 onToggleFunc = [&](bool state) \
787 { \
788 SETFLAG(var,0x4,state); \
789 }), \
790 Checkbox( \
791 text = "R", hAlign = 0.0, \
792 checked = var&0x8, \
793 onToggleFunc = [&](bool state) \
794 { \
795 SETFLAG(var,0x8,state); \
796 }), \
797 Checkbox( \
798 text = "Ex1", hAlign = 0.0, \
799 checked = var&0x10, \
800 onToggleFunc = [&](bool state) \
801 { \
802 SETFLAG(var,0x10,state); \
803 }), \
804 Checkbox( \
805 text = "Ex2", hAlign = 0.0, \
806 checked = var&0x20, \
807 onToggleFunc = [&](bool state) \
808 { \
809 SETFLAG(var,0x20,state); \
810 }), \
811 Checkbox( \
812 text = "Ex3", hAlign = 0.0, \
813 checked = var&0x40, \
814 onToggleFunc = [&](bool state) \
815 { \
816 SETFLAG(var,0x40,state); \
817 }), \
818 Checkbox( \
819 text = "Ex4", hAlign = 0.0, \
820 checked = var&0x80, \
821 onToggleFunc = [&](bool state) \
822 { \
823 SETFLAG(var,0x80,state); \
824 }) \
825 )
826
827 #define INTBTN_PANEL_EX(var,ltxt,inftxt,...) \
828 Column(padding = 0_px, __VA_ARGS__, \
829 Row(padding = 0_px, \
830 Label(text = ltxt), \
831 INFOBTN(inftxt) \
832 ), \
833 _INTBTN_PANEL_HELPER(var) \
834 )
835 #define INTBTN_PANEL(var,ltxt,inftxt) \
836 Column(padding = 0_px, \
837 Row(padding = 0_px, \
838 Label(text = ltxt), \
839 INFOBTN(inftxt) \
840 ), \
841 _INTBTN_PANEL_HELPER(var) \
842 )
843
844 #define INTBTN_FRAME_EX(var,ltxt,inftxt,...) \
845 Frame(title = ltxt, __VA_ARGS__, \
846 info = inftxt, \
847 _INTBTN_PANEL_HELPER(var) \
848 )
849 #define INTBTN_FRAME(var,ltxt,inftxt) \
850 Frame(title = ltxt, \
851 info = inftxt, \
852 _INTBTN_PANEL_HELPER(var) \
853 )
854
855 //
856
857 #define _INTBTN_PANEL_HELPER2(var,ltxt) \
858 Label(text = ltxt), \
859 Columns<4>( \
860 Checkbox( \
861 text = "A", hAlign = 0.0, \
862 checked = var&0x1, \
863 onToggleFunc = [&](bool state) \
864 { \
865 SETFLAG(var,0x1,state); \
866 }), \
867 Checkbox( \
868 text = "B", hAlign = 0.0, \
869 checked = var&0x2, \
870 onToggleFunc = [&](bool state) \
871 { \
872 SETFLAG(var,0x2,state); \
873 }), \
874 Checkbox( \
875 text = "L", hAlign = 0.0, \
876 checked = var&0x4, \
877 onToggleFunc = [&](bool state) \
878 { \
879 SETFLAG(var,0x4,state); \
880 }), \
881 Checkbox( \
882 text = "R", hAlign = 0.0, \
883 checked = var&0x8, \
884 onToggleFunc = [&](bool state) \
885 { \
886 SETFLAG(var,0x8,state); \
887 }), \
888 Checkbox( \
889 text = "Ex1", hAlign = 0.0, \
890 checked = var&0x10, \
891 onToggleFunc = [&](bool state) \
892 { \
893 SETFLAG(var,0x10,state); \
894 }), \
895 Checkbox( \
896 text = "Ex2", hAlign = 0.0, \
897 checked = var&0x20, \
898 onToggleFunc = [&](bool state) \
899 { \
900 SETFLAG(var,0x20,state); \
901 }), \
902 Checkbox( \
903 text = "Ex3", hAlign = 0.0, \
904 checked = var&0x40, \
905 onToggleFunc = [&](bool state) \
906 { \
907 SETFLAG(var,0x40,state); \
908 }), \
909 Checkbox( \
910 text = "Ex4", hAlign = 0.0, \
911 checked = var&0x80, \
912 onToggleFunc = [&](bool state) \
913 { \
914 SETFLAG(var,0x80,state); \
915 }) \
916 ) \
917 )
918 #define INTBTN_PANEL2_EX(var,ltxt,...) \
919 Column(padding = 0_px, __VA_ARGS__, _INTBTN_PANEL_HELPER2(var,ltxt)
920 #define INTBTN_PANEL2(var,ltxt) \
921 Column(padding = 0_px, _INTBTN_PANEL_HELPER2(var,ltxt)
922
923 //
924
925 #define _EX_RBOX hAlign = 1.0,boxPlacement = GUI::Checkbox::boxPlacement::RIGHT
926
927 //}
928
929 #endif
930